package com.tongcao.cn.thread.pool;

/**
 * @author:tongcao
 * @since:2019/6/19 16:01
 * Description:
 * <p>
 * 客户端可以通过execute(Job)方法将Job提交入线程池来执行，客户端完全不用等待Job的执行完成。除了execute(Job)方法以外，线程池接口提供了增加/减少工作者线程以及关闭线程池的方法。每个客户端提交的Job都会进入到一个工作队列中等待工作者线程的处理。
 */
public interface ThreadPool<JOB extends Runnable> {

    /**
     * 执行一个任务(Job),这个Job必须实现Runnable
     *
     * @param job
     */
    void execute(JOB job);

    /**
     * 关闭
     */
    void shutdown();


    /**
     * 增加工作线程
     *
     * @param num
     */
    void addWorker(int num);

    /**
     * 减少工作线程
     *
     * @param num
     */
    void removeWorker(int num);

    /**
     * 获取正在等待执行的任务数量
     */
    int getJobSize();

}
